package main
/**
给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。

进阶：你能尝试使用一趟扫描实现吗？

输入：head = [1,2,3,4,5], n = 2
输出：[1,2,3,5]
示例 2：

输入：head = [1], n = 1
输出：[]
示例 3：

输入：head = [1,2], n = 1
输出：[1]

 */

type ListNode struct {
	Val int
	Next *ListNode
}

func removeNthFromEnd(head *ListNode, n int) *ListNode {
	var length func(node *ListNode, n int) int
	length = func(node *ListNode, n int) int {
		if node == nil{
			return 0
		}
		 pos := length(node.Next, n) + 1
		//获取要删除链表的前一个结点，就可以完成链表的删除
		if pos == n + 1{
			node.Next = node.Next.Next;
		}
		return pos
	}
	 pos := length(head, n)
	// 说明删除的是头节点
	if pos == n {
		return head.Next
	}
	return head
}

func main() {
	l := &ListNode{2, &ListNode{1, &ListNode{3, nil}}}
	removeNthFromEnd(l,1)
}
